a <- 17
b <- 6
c <- 11
d <- 20
cross <- matrix(c(a,b,c,d), nrow = 2, byrow = TRUE,
dimnames = list(
c("高BMI群", "低BMI群"),
c("短距離群", "長距離群")
))
cross
## 短距離群 長距離群
## 高BMI群 17 6
## 低BMI群 11 20
\[ \text{OR} = \frac{a/c}{b/d} = \frac{a \cdot d}{b \cdot c} \]
OR <- (a * d) / (b * c)
OR
## [1] 5.151515
\[ \log(\text{OR}) = \log\left( \frac{a \cdot d}{b \cdot c} \right) \]
オッズ比は正の数ですが,その対数をとることで0を中心に左右対称な値に変換できます. この操作により,正規分布を仮定した統計解析が可能になります.
\[ SE\left( \log(\text{OR}) \right) = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]
SE_log_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
SE_log_OR
## [1] 0.6053092
\[ \begin{aligned} \log(\text{OR}) &\pm 1.96 \times \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \\ \Rightarrow \quad \text{OR}_{\text{lower}}, \text{OR}_{\text{upper}} &= \exp\left( \log(\text{OR}) \pm 1.96 \times \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \right) \end{aligned} \]
標準正規分布では,約95%の値が平均±1.96の範囲内に収まるため,推定値の周囲±1.96×標準誤差の範囲を信頼区間として採用します.
対数オッズ比をexp()_指数関数でもとの値に書き戻します.
log_OR <- log(OR)
CI_lower <- exp(log_OR - 1.96 * SE_log_OR)
CI_upper <- exp(log_OR + 1.96 * SE_log_OR)
cat("オッズ比と95%信頼区間(外れ値を除く54例) =",
round(OR, 3),
"[", round(CI_lower, 3), ",", round(CI_upper, 3), "]\n")
## オッズ比と95%信頼区間(外れ値を除く54例) = 5.152 [ 1.573 , 16.873 ]